#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    /*
        1.单向通信：客户端发送信息给服务器
    */
    //设置标题
    this->setWindowTitle("我是tcp服务器");

    //初始化服务器对象
    tcpserver=new QTcpServer(this);

    //绑定并监听
    tcpserver->listen(QHostAddress("192.168.6.1"),10000);

    //主动关联newConnection信号
    connect(tcpserver,SIGNAL(newConnection()),this,SLOT(newClientLink()));
}

MainWindow::~MainWindow()
{
    //关闭套接字
    tcpsock->close();
    delete ui;
}
//新的客户端连接
void MainWindow::newClientLink()
{
    //立马产生新的套接字
    tcpsock=tcpserver->nextPendingConnection();

    //把目前连接成功的那个客户端ip和端口号获取
    QString ip=tcpsock->peerAddress().toString();
    quint16 port=tcpsock->peerPort();
    //在横向列表框显示出来
    QString msg=QString("%1@%2").arg(ip).arg(port);
    ui->listWidget->addItem(msg);

    //接收客户端的信息
    //错误示范：不可以直接调用readAll/read接收对方的信息
    //QByteArray buf=tcpsock->readAll();
    //在文本浏览框显示
    //ui->textBrowser->setText(buf);

    //关联readyRead()信号，在槽函数里面接收客户端的信息
    connect(tcpsock,SIGNAL(readyRead()),this,SLOT(recvClientMsg()));
}
//专门接收客户端信息的槽函数
void MainWindow::recvClientMsg()
{
    QByteArray buf=tcpsock->readAll();
    //在文本浏览框显示
    //ui->textBrowser->setText(buf); //会覆盖原来的内容
    ui->textBrowser->append(buf); //追加显示，不会覆盖原来的内容
}

